package org.example;

public class Main {
    public static void main(String[] args){
        AsynchronousTransactionUtils asynchronousTransactionUtils = new AsynchronousTransactionUtils();
        //循环创建一些线程 放入执行机中
       for(int i =0;i<10;i++){
           asynchronousTransactionUtils.add(getRunnable(asynchronousTransactionUtils,i));
       }
       //执行run的时候运行 并直到全部线程都执行完毕才进行下一步
       boolean run = asynchronousTransactionUtils.run();

        //如果运行结果为false
        if (run){
            System.out.println("运行成功");
        }else{
            System.out.println("需要回滚");
        }


    }

    private static Runnable getRunnable(AsynchronousTransactionUtils asynchronousTransactionUtils,int id) {
        return () -> {
            long sTime = System.currentTimeMillis();
            int v = (int) (Math.random() * 99);
            boolean flag = true;
            //阻断 只有全部线程执行结束才会结束
            while (flag){
                //任何操作 这里自己随机抛个异常 模拟运行失败
                //判断随机数是否大于20 小余20算失败
                if (v<20){
                    System.out.println(id+"--------号线执行失败");
                    throw new RuntimeException();
                }

                long etime = System.currentTimeMillis();
                //判断运行 是否结束 flagTime 表示超时时间
                flag = asynchronousTransactionUtils.sleep(etime-sTime,10000);
            }
            System.out.println(id+"--------号线程正在等待");
            //能走出阻断就意味着全部线程执行结束
        };
    }
}